package com.yusvn.scm.goods.jiandang.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.yitter.idgen.YitIdHelper;
import com.jfinal.aop.Inject;
import com.jfinal.kit.Kv;
import com.jfinal.kit.Ret;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.yusvn.scm.admin.service.LoginService;
import com.yusvn.scm.common.BaseService;
import com.yusvn.scm.common.constant.Const;
import com.yusvn.scm.common.kit.MyKit;
import com.yusvn.scm.common.kit.RetKit;

import cn.hutool.extra.pinyin.PinyinUtil;


/**
 * 建档分货
 * @author liugz
 *
 */
public class ScmJiandangJdfhService extends BaseService {

	@Inject
	LoginService loginService;

	// 获取某商品所有门店零售价
	public List<Record> getMdlsj(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);

		// 查询结果到页面
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getMdlsj", kv).find();
		
		return recList;
	}
	
	//表1 获取需分货商品
	public List<Record> getFhsp(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//获取商品图片地址
		kv.set("goodsimg", getGoodsimg());

		// 查询结果到页面
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getFhsp", kv).find();
				
		return recList;
	}
	
	//表1 引入某天创建的商品
	public RetKit yrFhsp(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//获取原erp用户id
		String erpUserid = loginService.getErpUserId(kv.get("userid"), cid);
		if(StrKit.isBlank(erpUserid)) {
			return RetKit.fail("未获取到有效的ERP账号,请到用户管理中设置");
		}
		kv.set("erpUserid", erpUserid);
		
		Db.use(Const.SCMDB).template("scmJiandangJdfh.yrFhsp", kv).update();
		
		updateFhzt(kv); //更新分货状态
		
		return RetKit.ok("引入商品资料成功");
	}

	//档案 删除商品条码
	public RetKit delSku(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//System.out.println(kv.getStr("ids"));
		//JSONObject idsObj = JSON.parseObject(idsStr);
		//JSONArray idsArr = idsObj.getJSONArray("ids");
		JSONArray idsArr = JSON.parseArray(kv.getStr("ids") ); 
		
		Object[][] paras = new Object[idsArr.size()][1];
		for(int i=0;i<idsArr.size();i++) {
			paras[i][0] = idsArr.get(i);
		}
		
		int[] cntArr = Db.use(Const.SCMDB).batch("delete from defsku where id=? ", paras, 100);
		
		//统计成功行数
		int cntOk = 0;
		for(int i=0; i<cntArr.length; i++) {
			if(cntArr[i]==-2 || cntArr[i]==1) { //oracle返回-2、sqlserver返回1，表示成功
				cntOk++;
			}
		}
		
		if(cntArr.length>0) {
			return RetKit.ok("成功删除 "+cntOk+" 条条码");
		}
		
		return RetKit.fail("批量删除条码失败");
	}
	
	//档案 增加商品颜色 
	public RetKit addSpys(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//获取原erp用户id
		String erpUserid = loginService.getErpUserId(kv.get("userid"), cid);
		if(StrKit.isBlank(erpUserid)) {
			return RetKit.fail("未获取到有效的ERP账号,请到用户管理中设置");
		}
		kv.set("erpUserid", erpUserid);
		
		//获取商品id
		String spid = kv.getStr("spid");    //商品ID
		String spysStr = kv.getStr("spys2");  //新增的商品颜色
		String spcmStr = kv.getStr("spcm2");  //新增的商品尺码
		String spcmzStr = kv.getStr("spcmz2");  //新增的商品尺码组
		
		//校验是否空值
		if(StrKit.isBlank("spid")) {
			return RetKit.fail("商品ID不能空"); 
		}
		if((StrKit.isBlank(spysStr) || spysStr.equals("[]")) 
				&& (StrKit.isBlank(spcmStr) || spcmStr.equals("[]"))) {
			return RetKit.fail("商品颜色尺码不能都为空"); 
		}
		
		int cnt = 0; //新增了多少SKU
		try {
			//如果只选了颜色，则获取当前商品尺码组的尺码；如果只选了尺码，则获取当前商品所有颜色；如果颜色尺码都选了，则以选择的颜色尺码为准。
			if(StrKit.isBlank(spcmStr) || spcmStr.equals("[]")) {
				//获取当前商品尺码组中的尺码
				List<String> cmList = Db.use(Const.SCMDB).query("SELECT id FROM defsize where isdel=0 and cid=? "
						+ "and sizegid=(SELECT SIZEGID FROM DEFSTYLE WHERE id=?) ", cid, spid);
				spcmStr = JSON.toJSONString(cmList);
			}else if(StrKit.isBlank(spysStr) || spysStr.equals("[]")) {
				//获取当前商品所有颜色
				List<String> ysList = Db.use(Const.SCMDB).query("SELECT clrid FROM defsku where isdel=0 and cid=? "
						+ "and styleid=? GROUP BY clrid ", cid, spid);
				spysStr = JSON.toJSONString(ysList);
			}//else {}
			
			JSONArray spysArr = JSON.parseArray(spysStr);
			JSONArray spcmArr = JSON.parseArray(spcmStr);
			
			//获取原商品是否有条码
			int spcmCnt = Db.use(Const.SCMDB).queryInt("select count(*) from defsku where cid=? and styleid=? ", cid, spid);
			//获取原商品尺码组
			Record oldSpRec = Db.use(Const.SCMDB).template("scmBase.getProduct", kv).findFirst();
			
			//如果当前商品没有条码了，则必须要选择颜色尺码
			if(spcmCnt==0) {
				if(spysStr.length()<=0 || spcmStr.length()<=0) {
					return RetKit.fail("请选择商品颜色及尺码");
				}
				//如果尺码组修改了，则需要更新商品表的尺码组
				if(spcmzStr!=null && !spcmzStr.equals(oldSpRec.getStr("spcmz"))) {
					//更新商品的尺码组信息
					Db.use(Const.SCMDB).update("update defstyle set sizegid=? where cid=? and id=? ", spcmzStr, cid, spid);
				}
			}
			//如果当前商品有条码，则不能更换尺码组。 (需要先删除条码再新增)
			else if(spcmCnt>0 && spcmzStr!=null && !spcmzStr.equals(oldSpRec.getStr("spcmz"))) {
				return RetKit.fail("当前商品已有条码，不能更换尺码组");
			}
			
			//循环新增商品颜色尺码
			String ysid;
			String cmid;
			for(int i=0; i<spysArr.size(); i++) {
				for(int j=0; j<spcmArr.size(); j++) {
					ysid = spysArr.get(i).toString();
					cmid = spcmArr.get(j).toString();
					// 查询当前SKU是否存在，不存在才新增
					int skuCnt = Db.use(Const.SCMDB).queryInt("select count(*) from defsku "
							+ "where isdel=0 and cid=? and styleid=? and clrid=? and sizeid=? ", cid, spid, ysid, cmid);
					
					if(skuCnt==0) {
						//获取商品SKUid
						String skuid = Db.use(Const.SCMDB).queryStr("SELECT GET_SEQ('DEFSKU') FROM dual");
						//新增商品条码
						Db.use(Const.SCMDB).update("insert into defsku(id,cid,styleid,clrid,sizeid, createid,modifyid) "
								+ "values(?,?,?,?,?, ?,?)", skuid, cid, spid, ysid, cmid,  erpUserid,erpUserid);
						
						//调用保存商品条码的方法
						Db.use(Const.SCMDB).update("CALL DefSku_Save(?,1) ", skuid);
						
						cnt++;
					}
				}
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			//删除刚新增的临时商品SKU
			Db.use(Const.SCMDB).delete("DELETE FROM DEFSKU WHERE cid=? and styleid=? and createid=? ", 
					cid, spid, erpUserid );
			return RetKit.fail("新增条码失败:"+e.getMessage());
		}
		
		return RetKit.ok("新增商品SKU成功 "+cnt);
	}
	
	
	//档案 更新商品门店零售价 需要传参spid、lsjArr
	public RetKit gxMdlsj(Kv kv) throws Exception {//账套id
		String cid = getCid(); 
		kv.set("cid", cid);

		//获取原erp用户id
		String erpUserid = loginService.getErpUserId(kv.get("userid"), cid);
		if(StrKit.isBlank(erpUserid)) {
			return RetKit.fail("未获取到有效的ERP账号,请到用户管理中设置");
		}

		//获取要更新的商品ID
		String spid = kv.getStr("spid");
		if(StrKit.isBlank(spid)) {
			return RetKit.fail("无效的商品ID"); 
		}
		
		//获取商品门店零售价
		String lsjStr = kv.getStr("lsjArr");    //商品门店零售价
		if(StrKit.isBlank(lsjStr) || lsjStr.equals("[]")) {
			return RetKit.fail("商品门店零售价不能空"); 
		}
		
		//获取零售价调整单号
		List<Record> tzdList = Db.use(Const.SCMDB).find("select b.STOREID as mdid, min(a.id) as tzdh "
				+ "from BUSRETAILADJ a "
				+ "INNER JOIN BUSRETAILADJSTORE b ON a.id=b.MASTERID " 
				+ "WHERE a.ISDEL=0 AND a.CID=? and a.DISCOUNT='10000' "
				+ "GROUP BY b.STOREID ", cid);
		
		//循环更新门店零售价
		JSONArray lsjArr = JSON.parseArray(lsjStr);
		
		for(int i=0; i<lsjArr.size(); i++) { //使用事务? TODO
			JSONObject lsjObj = JSON.parseObject(lsjArr.get(i).toString());
			String mdid = lsjObj.getString("mdid");
			String mdlsj = lsjObj.getString("lsj");
			
			if(StrKit.isBlank(mdlsj)) {
				continue;
			}
			
			//查询是否存在，存在就更新，不存在就新增
			String lsjid = Db.use(Const.SCMDB).queryStr("select id from BUSRETAILADJALL "
					+ "where cid=? and styleid=? and storeid=? ", cid, spid, mdid);
			if(StrKit.notBlank(lsjid)) {
				 Db.use(Const.SCMDB).update("update BUSRETAILADJALL set fprice=?, modifytime=SYSDATE "
				 		+ "where cid=? and styleid=? and storeid=? ", mdlsj, cid, spid, mdid);
			}else {
				//获取商品门店零售价表ID
				lsjid = Db.use(Const.SCMDB).queryStr("SELECT GET_SEQ('BUSRETAILADJALL') FROM dual");
				//获取调整单号
				Optional<String> tzdh = tzdList.stream().filter(r -> r.getStr("mdid").equals(mdid)).map(r->r.getStr("tzdh")).findFirst();
				if(tzdh == null || !tzdh.isPresent()) {
					continue;
				}
				String tzdid = tzdh.get();
				
				//System.out.println("lsjid:"+lsjid+" cid:"+cid+" spid:"+spid+" mdid:"+mdid+" mdlsj:"+mdlsj+" tzdid:"+tzdid);
				//新增商品门店零售价
				Db.use(Const.SCMDB).update("insert into BUSRETAILADJALL(id,cid,styleid,STOREID,FPRICE,  ADJID) "
						+ "values(?,?,?,?,?, ?)", lsjid, cid, spid, mdid, mdlsj,  tzdid);
			}
			
			//调用保存商品门店零售价存储 BUSRETAILADJALL_Save
			Db.use(Const.SCMDB).update("CALL BUSRETAILADJALL_Save(?,?) ", lsjid,erpUserid);
		}
		
		//刷新分货中间表的标准价
		Db.use(Const.SCMDB).update("UPDATE scm_jiandang_fhjgmx SET DPRICE=getrprice2(mdid, spid, to_char(SYSDATE,'yyyyMMdd')) "
				+ "WHERE userid=? and spid=? ", kv.get("userid"), spid);
		
		return RetKit.ok("更新商品门店零售价成功");
	}
	
	//表1 新增商品到分货商品中间表
	public RetKit addFhsp(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);

		//获取原erp用户id
		String erpUserid = loginService.getErpUserId(kv.get("userid"), cid);
		if(StrKit.isBlank(erpUserid)) {
			return RetKit.fail("未获取到有效的ERP账号,请到用户管理中设置");
		}
		kv.set("erpUserid", erpUserid);
		//System.out.println("商品ID："+spid);
		
		int sfxzk = 0; //是否新增商品
		//判断是否新增款，新品则需先增加商品档案
		if(kv.getStr("spid")==null) {
			sfxzk = 1;
			
			//获取商品id
			String spid = Db.use(Const.SCMDB).queryStr("SELECT GET_SEQ('DEFSTYLE') FROM dual");
			kv.set("spid", spid);
//			//先生成商品款号
//			Long spbh = null; //YitIdHelper.nextId();
//			kv.set("spbh", spbh);
			
			if(StrKit.notNull(kv.get("spmc"))) {
				//去除商品名称中的回车换行  \t为制表符 \n为换行 \r为回车
				String spmc = kv.getStr("spmc").replaceAll("[\\t\\n\\r]", "").trim();
				kv.set("spmc", spmc);
				//生成商品名称拼音
				String spmcpy = PinyinUtil.getFirstLetter(spmc, "");
				kv.set("spmcpy",spmcpy);
				//System.out.println("拼音spmcpy:"+spmcpy);
			} else {
				return RetKit.fail("商品名称不能空"); 
			}
			
			if(!StrKit.notNull(kv.get("spcmz"))) {
				return RetKit.fail("商品尺码组不能空"); 
			}
			
			String spcmStr = kv.getStr("spcm");
			if(StrKit.isBlank(spcmStr) || spcmStr.equals("[]")) {
				return RetKit.fail("商品尺码不能空");
			}
			
			String spysStr = kv.getStr("spys");
			if(StrKit.isBlank(spysStr) || spysStr.equals("[]")) {
				return RetKit.fail("商品颜色不能空");
			}
			
			//1将信息存入erp的商品表
			int isOk = Db.use(Const.SCMDB).template("scmJiandangJdfh.addFhsp", kv).update();
			
			if(isOk>0) {
				try {
					//2调用保存商品存储（第1个参数为商品ID、第2个参数1表示修改？）
					Db.use(Const.SCMDB).update("CALL DefStyle_Save(?,1) ", spid);
					
					//4调用更新门店零售价方法  【百货客户定制】 TODO 2023/11/28 修改复制商品不需要带门店价格
					// gxMdlsj(kv);  //kv.set("spid", spid); //新增商品保存价格时需要传递spid
				} catch (Exception e) {
					e.printStackTrace();
					//删除刚新增的临时商品信息
					Db.use(Const.SCMDB).delete("DELETE FROM DEFSTYLE WHERE cid=? and id=? and createid=? ", 
							cid, spid, erpUserid );
					return RetKit.fail("新增商品失败:"+e.getMessage());
				}
				
				try {
					//3循环新增商品颜色尺码
					JSONArray spysArr = JSON.parseArray(spysStr);
					JSONArray spcmArr = JSON.parseArray(spcmStr);
					String ysid;
					String cmid;
					for(int i=0; i<spysArr.size(); i++) {
						for(int j=0; j<spcmArr.size(); j++) {
							ysid = spysArr.get(i).toString();
							cmid = spcmArr.get(j).toString();
							//获取商品SKUid
							String skuid = Db.use(Const.SCMDB).queryStr("SELECT GET_SEQ('DEFSKU') FROM dual");
//							System.out.println("skuid:"+skuid+" spid:"+spid+" ysid:"+ysid+" cmid:"+cmid);
							//新增商品条码
							Db.use(Const.SCMDB).update("insert into defsku(id,cid,styleid,clrid,sizeid, createid,modifyid) "
									+ "values(?,?,?,?,?, ?,?)", skuid, cid, spid, ysid, cmid,  erpUserid,erpUserid);
							
							//调用保存商品条码的方法
							Db.use(Const.SCMDB).update("CALL DefSku_Save(?,1) ", skuid);
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
					//删除刚新增的临时商品SKU
					Db.use(Const.SCMDB).delete("DELETE FROM DEFSKU WHERE cid=? and styleid=? and createid=? ", 
							cid, spid, erpUserid );
					return RetKit.fail("新增条码失败:"+e.getMessage());
				}
			}else {
				return RetKit.fail("新增商品失败！");
			}
			
		}
		//非新增商品，是否修改了商品属性
		else if(kv.getStr("spid")!=null && kv.getStr("isChange").equals("1")) {
			//获取商品id
			String spid = kv.getStr("spid");
			
//			//获取原商品名称
//			String oldSpmc = Db.use(Const.SCMDB).queryStr("select stylename from defstyle where id=? ", spid);
//			//System.out.println(" 原商品名称："+oldSpmc);
//			if(StrKit.isBlank(oldSpmc)) {
//				return RetKit.fail("更新获取商品失败");
//			}
//			kv.set("code", oldSpmc); //根据商品名称获取原商品信息
			
			//先获取未修改前商品信息，如果存储过程中失败，则还原原商品信息
			Record oldSpRec = Db.use(Const.SCMDB).template("scmBase.getProduct", kv).findFirst();
			//System.out.println(" 原商品信息："+oldSpRec);
			
			//修改erp中的商品属性
			int isOk = Db.use(Const.SCMDB).template("scmJiandangJdfh.updateFhsp", kv).update();
			//System.out.println(" isOk:"+isOk);
			if(isOk>0) {
				try {
					//调用保存商品存储（第1个参数为商品ID、第2个参数1表示修改？）
					Db.use(Const.SCMDB).update("CALL DefStyle_Save(?,1) ", spid);
				} catch (Exception e) {
					//还原原商品信息
					kv.set("oldSpRec", oldSpRec);
					Db.use(Const.SCMDB).template("scmJiandangJdfh.updateFhspOld", kv).update();
					
					return RetKit.fail("更新商品失败:"+e.getMessage());
				}
			}else {
				return RetKit.fail("更新商品失败！");
			}
		}
		kv.set("sfxzk", sfxzk);
		
		//查询分货商品临时表中是否存在，不存在才新增
		Integer isCnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhsp "
				+ "where cid=? and userid=? and spid=? ", 
				kv.get("cid"), kv.get("userid"), kv.get("spid") );
		if(isCnt!=null && isCnt>0) {
			return RetKit.ok("商品已经加入");
		}
		
		int cnt = Db.use(Const.SCMDB).templateByString("INSERT INTO scm_jiandang_fhsp(id, cid, userid, spid, sfxzk) "
				+ "values(GET_SEQ('scm_jiandang_fhsp'), #(cid), #(userid), #(spid), #(sfxzk) )", kv).update();

		updateFhzt(kv); //更新分货状态
		
		if(cnt==-2 || cnt==1) { //oracle返回-2、sqlserver返回1，表示成功
			return RetKit.ok("保存成功");
		}
		
		return RetKit.fail("保存失败");
	}
		

	//表1 删除分货商品  改成事务？ TODO
	public RetKit delFhsp(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//System.out.println(kv.getStr("ids"));
		//JSONObject idsObj = JSON.parseObject(idsStr);
		//JSONArray idsArr = idsObj.getJSONArray("ids");
		JSONArray idsArr = JSON.parseArray(kv.getStr("ids") ); 
		
		Object[][] paras = new Object[idsArr.size()][1];
		for(int i=0;i<idsArr.size();i++) {
			paras[i][0] = idsArr.get(i);
		}
		
		int[] cntArr = Db.use(Const.SCMDB).batch("delete from scm_jiandang_fhsp where spid=? ", paras, 100);
		
		//统计成功行数
		int cntOk = 0;
		for(int i=0; i<cntArr.length; i++) {
			if(cntArr[i]==-2 || cntArr[i]==1) { //oracle返回-2、sqlserver返回1，表示成功
				cntOk++;
			}
		}

//		//删除分货结果 
//		delFhjgsp(kv); //取消采入
		
		if(cntArr.length>0) {
			return RetKit.ok("成功删除 "+cntOk+" 条数据");
		}
		
		return RetKit.fail("批量删除失败");
	}

	//表1 取消采入
	public RetKit delFhjgsp(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//删除分货结果
		Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjgmx where cid='#(cid)' and userid='#(userid)' "
				+ "and ("
				+ "#for(x : ids) "
				+ "	spid='#(x)' #(for.last ? '' : 'or ') "
				+ "#end "
				+ ")", kv).update();
		
		//删除分货结果主表(流水号)
		Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjg where cid='#(cid)' and userid='#(userid)' "
				+ "and mdid not in ("
				+ " SELECT MDID FROM scm_jiandang_fhjgmx WHERE cid='#(cid)' AND userid='#(userid)' GROUP BY MDID "
				+ ")", kv).update();
		
		updateFhzt(kv); //表1 更改状态
		
		return RetKit.ok("成功取消采入");
	}
	
	//表5 根据参数删除分货结果明细 （type=1按店款色，type=2按店条码，type=3按店款）
	public RetKit delFhjgDt(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//先删除分货结果中无效的skuid行
		Db.use(Const.SCMDB).update("DELETE FROM SCM_JIANDANG_FHJGMX WHERE "
				+ "(skuid IS NULL or skuid NOT IN (SELECT id FROM defsku where cid=? and isdel=0) ) and userid=? ", cid, kv.get("userid"));
		
		//删除分货结果
		int type = kv.getInt("type");
		if(type==1) {
			Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjgmx where cid='#(cid)' and userid='#(userid)' "
					+ "and mdid='#(mdid)' and spid='#(spid)' and ysid='#(ysid)' ", kv).update();
		}else if(type==2) {
			Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjgmx where cid='#(cid)' and userid='#(userid)' "
					+ "and mdid='#(mdid)' and skuid='#(skuid)' ", kv).update();
		}else if(type==3) {
			Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjgmx where cid='#(cid)' and userid='#(userid)' "
					+ "and mdid='#(mdid)' and spid='#(spid)' ", kv).update();
		}else {
			return RetKit.fail("删除分货结果失败");
		}
		
		updateFhzt(kv); //表1 更改状态
		
		return RetKit.ok("成功删除分货结果");
	}
	
	//表1 更改状态
	public RetKit updateFhzt(Kv kv) {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//先将分货状态改为0
		Db.use(Const.SCMDB).update("update scm_jiandang_fhsp set fhzt=0 where cid=? and userid=? ", kv.get("cid"), kv.get("userid") );

		//再更新分货临时表状态
		Db.use(Const.SCMDB).update("update scm_jiandang_fhsp set fhzt=1 where cid=? and userid=? "
				+ "and spid in ( select spid from scm_jiandang_fhjgmx where cid=? and userid=? and bcfhsl>0 group by spid ) "
				, kv.get("cid"), kv.get("userid"), kv.get("cid"), kv.get("userid") );
		return RetKit.ok();
	}
	
	//表1 获取状态
	public List<Record> getFhzt(Kv kv) {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getFhzt", kv).find();
		return recList;
	}
	
	//表3 获取本次采入结果（色码明细）
	public List<Record> getCrslSm(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);

		//获取原erp用户id
		String erpUserid = loginService.getErpUserId(kv.get("userid"), cid);
		kv.set("erpUserid", erpUserid);
		// 是否使用上次采购价
		String sccgj = Db.use(Const.SCMDB).queryStr("select pz2 from scm_pz where bh = 'scm_buhuo_sccg'");
		kv.set("sccgj",sccgj);
		// 查询结果到页面
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getCrslSm", kv).find();
				
		return recList;
	}

	//表4 获取采入结果（店汇总）
	public List<Record> getCrslMd(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);

		// 查询结果到页面
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getCrslMd", kv).find();
				
		return recList;
	}

	//表4 删除采入结果 -按门店
	public RetKit delFhjgmd(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjgmx where cid='#(cid)' and userid='#(userid)' and ("
				+ "#for(x : mdid) "
				+ "	mdid='#(x)' #(for.last ? '' : 'or ') "
				+ "#end "
				+ ")", kv).update();
		
		//删除分货结果主表（流水号）
		Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjg where cid='#(cid)' and userid='#(userid)' and ("
				+ "#for(x : mdid) "
				+ "	mdid='#(x)' #(for.last ? '' : 'or ') "
				+ "#end "
				+ ")", kv).update();
		
		updateFhzt(kv); //表1 更改状态
		
		return RetKit.ok("删除成功");
	}

	//表4 删除采入结果 -清空所有
	public RetKit delFhjg(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjgmx where cid='#(cid)' and userid='#(userid)' ", kv).update();
		
		//删除分货结果主表（流水号）
		Db.use(Const.SCMDB).templateByString("delete from scm_jiandang_fhjg where cid='#(cid)' and userid='#(userid)' ", kv).update();
		
		updateFhzt(kv); //表1 更改状态
		
		return RetKit.ok("清空成功");
	}

	//表4 复制粘贴单据分货结果 （mdid被复制的店，mdid2复制到哪个店）
	public RetKit copyFhjg(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		//查询单据
		List<Record> billList = Db.use(Const.SCMDB).templateByString(
				"with tmp_sppx as ( "  //--用于按录单时间排序 
				+ "	select a.mdid, a.spid, min(a.createtime) as createtime, min(a.id) as id  " 
				+ " from SCM_JIANDANG_FHJGMX a " 
				+ " WHERE a.cid='#(cid)' AND a.userid='#(userid)' "
				+ " and mdid<>#(mdid2) "
				+ " and ("
				+ " #for(x : mdid) "
				+ " 	a.mdid='#(x)' #(for.last ? '' : 'or ') "
				+ " #end "
				+ " ) "
				+ " group by a.mdid, a.spid " 
				+ ") "
				+ "SELECT a.skuid, a.spid, a.ysid, a.cmid, a.bcfhsl, a.fprice, a.dprice " 
				+ "FROM scm_jiandang_fhjgmx a "
				+ "left join tmp_sppx px on a.mdid=px.mdid and a.spid=px.spid "
				+ "WHERE a.cid='#(cid)' AND a.userid='#(userid)' "
				+ "and a.mdid<>#(mdid2) "
				+ "and ("
				+ "#for(x : mdid) "
				+ "	a.mdid='#(x)' #(for.last ? '' : 'or ') "
				+ "#end "
				+ ") "
				+ "order by px.id, px.createtime ", kv).find();
//		System.out.println(JSON.toJSONString(billList));
		//插入语句
		String sqls = "INSERT INTO scm_jiandang_fhjgmx(id, cid, userid, mdid, skuid,  spid, ysid, cmid, bcfhsl, fprice,  dprice) "
				+ "values(GET_SEQ('scm_jiandang_fhjgmx'),?,?,?,?, ?,?,?,?,?, ?) ";
		
		Object[][] paras = new Object[billList.size()][10];
		for(int i=0;i<billList.size();i++) {
			//paras[i][0] = billList.get(i).get("id");
			paras[i][0] = cid;
			paras[i][1] = kv.get("userid");
			paras[i][2] = kv.get("mdid2");
			paras[i][3] = billList.get(i).get("skuid");
			paras[i][4] = billList.get(i).get("spid");
			paras[i][5] = billList.get(i).get("ysid");
			paras[i][6] = billList.get(i).get("cmid");
			paras[i][7] = billList.get(i).get("bcfhsl");
			paras[i][8] = billList.get(i).get("fprice");
			paras[i][9] = billList.get(i).get("dprice");
		}
		
		int[] cntArr = Db.use(Const.SCMDB).batch(sqls, paras, 100);
		
		int cntOk = 0;
		for(int i=0; i<cntArr.length; i++) {
			cntOk = cntOk + cntArr[i];
		}
		
		if(cntArr.length>0) {
			updateFhzt(kv); //表1 更改状态
			return RetKit.ok("单据复制成功");
		}
		return RetKit.fail("单据复制失败");
		
		
//		Db.use(Const.SCMDB).templateByString("INSERT INTO scm_jiandang_fhjgmx(id, cid, userid, mdid, skuid, spid, ysid, cmid, bcfhsl, fprice, dprice) " + 
//				"SELECT GET_SEQ('scm_jiandang_fhjgmx'), '#(cid)', '#(userid)', #(mdid2), skuid, spid, ysid, cmid, bcfhsl, fprice, dprice " + 
//				"FROM scm_jiandang_fhjgmx " + 
//				"WHERE cid='#(cid)' AND userid='#(userid)' "
//				+ "and mdid<>#(mdid2) "
//				+ "and ("
//				+ "#for(x : mdid) "
//				+ "	mdid='#(x)' #(for.last ? '' : 'or ') "
//				+ "#end "
//				+ ") ", kv).update(); // order by id, createtime 
//		
//		//复制分货结果主表 （暂不开启复制主单功能）
//		/*
//		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjg "
//				+ "where cid=? and userid=? and mdid=? ", kv.get("cid"), kv.get("userid"), kv.get("mdid2") );
//		if(cnt==null || cnt==0) {
//			Db.use(Const.SCMDB).templateByString("insert into scm_jiandang_fhjg(id, cid, userid, mdid, ml, zdbz, sgdh ) " + 
//					"SELECT GET_SEQ('scm_jiandang_fhjg'), '#(cid)', '#(userid)', #(mdid2), ml, null, null " + 
//					"FROM scm_jiandang_fhjg " + 
//					"WHERE cid='#(cid)' AND userid='#(userid)' "
//					+ "and mdid<>#(mdid2) "
//					+ "and ("
//					+ "#for(x : mdid) "
//					+ "	mdid='#(x)' #(for.last ? '' : 'or ') "
//					+ "#end "
//					+ ")", kv).update();
//		}
//		*/
//		
//		updateFhzt(kv); //表1 更改状态
//		return RetKit.ok("单据复制成功");
	}

	//表4 生成单据 （先做个存储过程将采入结果写入采购表，然后调用erp中保存采购单的存储过程）
	public RetKit scdj(Kv kv) throws Exception {
		//return RetKit.fail("功能暂未开放");
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		String userid=kv.getStr("userid");
		
		//获取原erp用户id
		String erpUserid = loginService.getErpUserId(kv.get("userid"), cid);
		if(StrKit.isBlank(erpUserid)) {
			return RetKit.fail("未获取到有效的ERP账号,请到用户管理中设置");
		}
		kv.set("erpUserid", erpUserid);

		//生成单据前 检查同店是否有多个供应商的货品
		Integer gysCnt = Db.use(Const.SCMDB).template("scmJiandangJdfh.sameSupplier", kv).queryInt();
		if(gysCnt>0) {
			return RetKit.fail("同店不能一次采入多个供应商货品");
		}
		
		try {
			//先删除之前临时表用户勾选的id
			Db.use(Const.SCMDB).update("delete from scm_base_ids where cid=? and userid=? and lx='jdfh_scdj' ", cid, userid);
			
			//存入用户勾选的id到临时表
			JSONArray idsArr = JSON.parseArray(kv.getStr("mdid"));
			Object[][] paras = new Object[idsArr.size()][3];
			for(int i=0;i<idsArr.size();i++) {
				paras[i][0] = idsArr.get(i);
				paras[i][1] = cid;
				paras[i][2] = userid;
			}
			//Thread.sleep(1000*5); // 休眠5秒
			Db.use(Const.SCMDB).batch("insert into scm_base_ids(id, cid, lx, userid) values(?, ?, 'jdfh_scdj', ?)", paras, 500);
			
			//调用存储过程生成采购订单、采购单存储（传设置的 账套id\分货用户id\生成单据的ERP用户ID）
			Db.use(Const.SCMDB).update("CALL proc_scm_sccgd(?,?,?,?,?) ", getCid(), userid, erpUserid, kv.getDate("djDate1"),kv.get("djlx")); //用了补货模块的
//			Db.use(Const.SCMDB).update("CALL proc_scm_sccgd(?,?,?,?) ", getCid(), userid, erpUserid, kv.getDate("djDate1"));
			
			//删除临时表用户勾选的id
			Db.use(Const.SCMDB).update("delete from scm_base_ids where cid=? and userid=? and lx='jdfh_scdj' ", cid, userid);
			
			updateFhzt(kv); //表1 更改状态
		} catch (Exception e) {
			e.printStackTrace();
			return RetKit.fail("生成单据失败:"+e.getMessage() );
		}
		return RetKit.ok("生成单据成功");
		
	}

	//表5 查看采入明细（某店所有款）
	public List<Record> getCrmx(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		// 查询结果到页面
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getCrmx", kv).find();
				
		return recList;
	}
	
	/**
	 * 表3 修改采入数量
	 */
	public RetKit updateCrsl(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//return RetKit.ok("修改成功");
		//System.out.println(kv);
		
		//判断是否一样
		if(kv.get("skuid") == null) {
			return RetKit.fail("条码不存在");
		}
		
		//先查询是否存在，存在则修改，不存在则新增
		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjgmx "
				+ "where cid=? and userid=? and mdid=? and skuid=? ", 
				kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("skuid") );
		if(cnt!=null && cnt>0) {
			Integer xghsl = kv.getInt("xghsl");
			int retCnt = 0;
			if(xghsl==null || xghsl==0) {
				retCnt = Db.use(Const.SCMDB).update("delete from scm_jiandang_fhjgmx "
						+ "where cid=? and userid=? and mdid=? and skuid=? and spid=? and ysid=? and cmid=? ", 
						kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("skuid"), kv.get("spid"), kv.get("ysid"), kv.get("cmid") );
				
			}else {
				retCnt = Db.use(Const.SCMDB).update("update scm_jiandang_fhjgmx set bcfhsl=? "
						+ "where cid=? and userid=? and mdid=? and skuid=? and spid=? and ysid=? and cmid=? ", 
						kv.get("xghsl"), 
						kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("skuid"), kv.get("spid"), kv.get("ysid"), kv.get("cmid") );
				
			}
			
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				updateFhzt(kv); //表1 更改状态
				return RetKit.ok(kv.get("cmmc")+" 修改成功 "+kv.get("xghsl"));
			}
		}else {
			//价格未填取默认发货价?
			Long fhjgmxId = Db.use(Const.SCMDB).queryLong("SELECT GET_SEQ('scm_jiandang_fhjgmx') FROM dual "); //YitIdHelper.nextId();
			int retCnt = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjgmx(id, cid, userid, mdid, skuid,  "
					+ "spid, ysid, cmid, bcfhsl, fprice, dprice ) "
					+ "values(?,?,?,?,?,  ?,?,?,?,?,  ?)",  
					fhjgmxId, kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("skuid"), 
					kv.get("spid"), kv.get("ysid"), kv.get("cmid"),  kv.get("xghsl"), kv.get("fhj"), kv.get("lsj") );

			//新增时 检查同店是否有多个供应商的货品 (这里需放在新增语句后面)
			Integer gysCnt = Db.use(Const.SCMDB).template("scmJiandangJdfh.sameSupplierDt", kv).queryInt();
			if(gysCnt>0) {
				//System.out.println("cid:"+kv.get("cid")+" userid:"+kv.get("userid")+ " fhjgmxId:"+fhjgmxId);
				Db.use(Const.SCMDB).update("delete from scm_jiandang_fhjgmx "
						+ "where cid=? and userid=? and id=? ", kv.get("cid"), kv.get("userid"), fhjgmxId);
				return RetKit.fail("同店不能一次采入多个供应商货品");
			}
			
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				updateFhzt(kv); //表1 更改状态
				return RetKit.ok(kv.get("cmmc")+" 修改成功 "+kv.get("xghsl"));
			}
		}
		
		return RetKit.fail("修改失败");
	}
	
	/**
	 * 表3 修改采入发货价
	 */
	public RetKit updateCrfhj(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//return RetKit.ok("修改成功");
		//System.out.println(kv);
		
		//先查询是否存在，存在则修改
		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjgmx "
				+ "where cid=? and userid=? and mdid=? and spid=? ", 
				kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("spid") );
		
		if(cnt!=null && cnt>0) {
			int retCnt = Db.use(Const.SCMDB).update("update scm_jiandang_fhjgmx set fprice=? "
					+ "where cid=? and userid=? and mdid=? and spid=? ", 
					kv.get("fhj"), 
					kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("spid") );
			if(retCnt>0) { //修改成功几条
				return RetKit.ok( "价格修改为 "+kv.get("fhj"));
			}
		}else {
			return RetKit.fail("请先填入数量");
		}
		
		return RetKit.fail("修改失败");
	}
	
	/**
	 * 表3 修改采入整手数
	 */
	public RetKit updateCrzss(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//1先删除
		Db.use(Const.SCMDB).update("delete from scm_jiandang_fhjgmx where cid=? and userid=? and mdid=? and spid=? and ysid=? ", 
				kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("spid"), kv.get("ysid"));
		
		//2再批量插入某店某款色所有尺码数量 TODO
		//获取某商品所有尺码
		Kv kvcm = Kv.create().set("cid", kv.get("cid")).set("id", kv.get("spid")).set("ysid", kv.get("ysid"));
		List<Record> spcmList = Db.use(Const.SCMDB).template("scmBase.getProductClrSizes", kvcm).find();
		int okCnt = 0;
		for(Record rec : spcmList) {
			//生成表ID
			Long fhjgmxId = Db.use(Const.SCMDB).queryLong("SELECT GET_SEQ('scm_jiandang_fhjgmx') FROM dual "); //YitIdHelper.nextId();
			//新增分货记录
			int retCnt = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjgmx(id, cid, userid, mdid, skuid, "
					+ "spid, ysid, cmid, bcfhsl, fprice, dprice ) "
					+ "values(?,?,?,?,?,  ?,?,?,?,?,  ?)",  
					fhjgmxId, kv.get("cid"), kv.get("userid"), kv.get("mdid"), rec.get("skuid"), 
					kv.get("spid"), kv.get("ysid"), rec.get("cmid"),  kv.get("zss"), kv.get("fhj"), kv.get("lsj") );
			
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				okCnt++;
			}
		}
		
		if(okCnt>0) {
			updateFhzt(kv); //表1 更改状态
			return RetKit.ok("修改成功 "+okCnt+"-"+spcmList.size());
		}
		
		return RetKit.fail("修改失败");
	}

	/**
	 * 表4 修改手工单号（包单号）
	 */
	public RetKit updateSgdh(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//return RetKit.ok("修改成功");
		//System.out.println(kv);
		
//		//包单号不能重复
//		int sgdh = Db.use().queryInt("select count(*) cnt from scm_jiandang_fhjg "
//				+ "where cid=? and userid=? and mdid=? and sgdh=? ", kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("sgdh") );
//		if(sgdh>0) {
//			return RetKit.ok("包单号已存在");
//		}else {
//			sgdh = Db.use().queryInt("select count(*) cnt from BUSPUR "
//					+ "where isdel=0 and cid=? and sgdh=? ", kv.get("cid"), kv.get("sgdh") ); // and status>1
//			if(sgdh>0) {
//				return RetKit.ok("包单号已存在.");
//			}
//		}
		
		//先查询建档分货主表中是否存在门店数据，存在则修改，不存在则新增
		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjg "
				+ "where cid=? and userid=? and mdid=? ", kv.get("cid"), kv.get("userid"), kv.get("mdid") );
		if(cnt!=null && cnt>0) {
			int retCnt = Db.use(Const.SCMDB).update("update scm_jiandang_fhjg set sgdh=? "
					+ "where cid=? and userid=? and mdid=? ", 
					kv.get("xghsl"), kv.get("cid"), kv.get("userid"), kv.get("mdid") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("修改成功 "+kv.get("xghsl"));
			}
		}else {
			int retCnt = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjg(id, cid, userid, mdid, sgdh ) "
					+ "values(GET_SEQ('scm_jiandang_fhjg'),?,?,?,? )",  
					kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("xghsl") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("新增成功 "+kv.get("xghsl"));
			}
		}
		
		return RetKit.fail("更新失败");
	}

	/**
	 * 表4 修改整单备注
	 */
	public RetKit updateZdbz(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//return RetKit.ok("修改成功");
		//System.out.println(kv);
		
		//先查询是否存在，存在则修改，不存在则新增
		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjg "
				+ "where cid=? and userid=? and mdid=? ", kv.get("cid"), kv.get("userid"), kv.get("mdid") );
		if(cnt!=null && cnt>0) {
			int retCnt = Db.use(Const.SCMDB).update("update scm_jiandang_fhjg set zdbz=? "
					+ "where cid=? and userid=? and mdid=? ", 
					kv.get("xghsl"),  kv.get("cid"), kv.get("userid"), kv.get("mdid") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("修改备注成功 ");
			}
		}else {
			int retCnt = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjg(id, cid, userid, mdid, zdbz ) "
					+ "values(GET_SEQ('scm_jiandang_fhjg'),?,?,?,? )",  
					kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("xghsl") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("新增备注成功 ");
			}
		}
		
		return RetKit.fail("更新备注失败");
	}

	/**
	 * 表4 修改整单抹零
	 */
	public RetKit updateMl(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//return RetKit.ok("修改成功");
		//System.out.println(kv);
		
		//先查询是否存在，存在则修改，不存在则新增
		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjg "
				+ "where cid=? and userid=? and mdid=? ", kv.get("cid"), kv.get("userid"), kv.get("mdid") );
		if(cnt!=null && cnt>0) {
			int retCnt = Db.use(Const.SCMDB).update("update scm_jiandang_fhjg set ml=? "
					+ "where cid=? and userid=? and mdid=? ", 
					kv.get("xghsl"),  kv.get("cid"), kv.get("userid"), kv.get("mdid") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("抹零成功. ");
			}
		}else {
			int retCnt = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjg(id, cid, userid, mdid, ml ) "
					+ "values(GET_SEQ('scm_jiandang_fhjg'),?,?,?,? )",  
					kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("xghsl") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("抹零成功 ");
			}
		}
		
		return RetKit.fail("抹零失败");
	}

	/**
	 * 表4 修改业务员采购员
	 */
	public RetKit updateYwy(Kv kv) throws Exception {
		//账套id
		String cid = getCid();
		kv.set("cid", cid);
		
		//return RetKit.ok("修改成功");
		//System.out.println(kv);
		
		//先查询是否存在，存在则修改，不存在则新增
		Integer cnt = Db.use(Const.SCMDB).queryInt("select count(*) cnt from scm_jiandang_fhjg "
				+ "where cid=? and userid=? and mdid=? ", kv.get("cid"), kv.get("userid"), kv.get("mdid") );
		if(cnt!=null && cnt>0) {
			int retCnt = Db.use(Const.SCMDB).update("update scm_jiandang_fhjg set ywy=? "
					+ "where cid=? and userid=? and mdid=? ", 
					kv.get("xghsl"),  kv.get("cid"), kv.get("userid"), kv.get("mdid") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("更新成功. ");
			}
		}else {
			int retCnt = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjg(id, cid, userid, mdid, ywy ) "
					+ "values(GET_SEQ('scm_jiandang_fhjg'),?,?,?,? )",  
					kv.get("cid"), kv.get("userid"), kv.get("mdid"), kv.get("xghsl") );
			if(retCnt==1 || retCnt==2) { //oracle返回-2、sqlserver返回1，表示成功
				return RetKit.ok("更新成功 ");
			}
		}
		
		return RetKit.fail("更新失败");
	}

	//表1 获取业务员采购员
	public List<Record> getYwy(Kv kv) throws Exception {
		//账套id
		String cid = getCid(); 
		kv.set("cid", cid);
		
		// 查询结果到页面
		List<Record> recList = Db.use(Const.SCMDB).template("scmJiandangJdfh.getYwy", kv).find();
				
		return recList;
	}

	/**
	 * 根据供应商获取款号
	 */
	public List<Record> getSpByGys(Kv kv){
	
		kv.set("cid",getCid());
		
		//获取商品图片地址
		kv.set("goodsimg", getGoodsimg());
		
		Integer integer = Db.use(Const.SCMDB).queryInt("select count(*) from scm_jiandang_ddlr where userid=?",kv.get("userid"));
		Integer gysid = Db.use(Const.SCMDB).queryInt("select count(*) from scm_jiandang_ddlr lr left join defstyle sp" +
				" on lr.spid = sp.id" +
				" left join defprovide gys on sp.provideid = gys.id" +
				" where gys.id = ? ", kv.get("gysid"));
		if(integer == 0 || gysid > 0){
			List<Record> records = Db.use(Const.SCMDB).template("scmJiandangJdfh.getSpByGys",kv).find();
			return records;
		}
		return null;
	}

	/**
	 * 新增选择的商品
	 */
	public RetKit qrxzsp(Kv kv){
		
        
		JSONArray idsArr = JSON.parseArray(kv.get("spList").toString());
		Object[][] paras = new Object[idsArr.size()][4];
		Object[][] paras2 = new Object[idsArr.size()][2];
		int count = 0;
		Integer integer = Db.use(Const.SCMDB).queryInt("select max(px) from scm_jiandang_ddlr");
		if (integer == null){
			integer = 0;
		}else{
			integer += 1;
		}
		
		//更新新增行
	    Object value=kv.get("id");
	    
		if(value!=null && idsArr.size()==1) {
		int cntArr = Db.use(Const.SCMDB).update("update scm_jiandang_ddlr set spid=? where id=?", idsArr.get(0),value);	
		
		if(cntArr>0) {
			return RetKit.ok("成功加入 "+cntArr+" 条数据");
		  }
		}else {
		
		for (int i = 0; i < idsArr.size(); i++) {
				paras2[i][0] = idsArr.get(i); // 商品id
				paras2[i][1] = kv.get("userid"); // userid
				paras[i][0] = YitIdHelper.nextId();
				paras[i][1] = idsArr.get(i); // 商品id
				paras[i][2] = integer++; // 获取排序默认值
				paras[i][3] = kv.get("userid"); // userid
		}
			Db.use(Const.SCMDB).batch("delete from  scm_jiandang_ddlr where spid = ? and userid=?",paras2,100);
		int[] cntArr = Db.use(Const.SCMDB).batch("insert into scm_jiandang_ddlr(id, spid, px,userid) values(?, ?, ?,?)", paras, 100);


		int cntOk = 0;
		for(int i=0; i<cntArr.length; i++) {
			if(cntArr[i]==-2 || cntArr[i]==1) { //oracle返回-2、sqlserver返回1，表示成功
				cntOk++;
			}
		}

		if(cntArr.length>0) {
			return RetKit.ok("成功加入 "+cntOk+" 条数据");
		 }
	  }

		return RetKit.fail("加入失败");
    }
		

	/**
	 * 新增行
	 */
	public RetKit xZh(Kv kv) {
	    Object value = kv.get("px");
	    
	    if (value != null) {
	        if (value instanceof BigDecimal) {
	            BigDecimal decimalValue = (BigDecimal) value;
	            int intValue = decimalValue.intValue(); // 将 BigDecimal 转换为 int 类型
	            double result = intValue + 0.1;
	        
	            // 执行数据库操作
	            Integer integer1 = Db.use(Const.SCMDB).queryInt("select get_seq('scm_jiandang_ddlr') from dual");
	            int cntArr = Db.use(Const.SCMDB).update("insert into scm_jiandang_ddlr(id, px,userid) values(?, ?,?)", integer1, result,kv.get("userid"));
	        
	            if (cntArr > 0) {
	                return RetKit.ok("成功加入");
	            } else {
	                return RetKit.fail("加入失败");
	            }
	        } else if (value instanceof Integer) {
	            Integer intValue = (Integer) value;
	            double result = intValue + 0.1;
	        
	            // 执行数据库操作
	            Integer integer1 = Db.use(Const.SCMDB).queryInt("select get_seq('scm_jiandang_ddlr') from dual");
	            int cntArr = Db.use(Const.SCMDB).update("insert into scm_jiandang_ddlr(id, px,userid) values(?, ?,?)", integer1, result,kv.get("userid"));
	        
	            if (cntArr > 0) {
	                return RetKit.ok("成功加入");
	            } else {
	                return RetKit.fail("加入失败");
	            }
	        } else {
	            return RetKit.fail("px值不是BigDecimal或Integer类型");
	        }
	    } else {
	        return RetKit.fail("px值为空");
	    }
	}

	/**
	 * 查询已经存在的商品
	 */
	public List<Record> selectCzsp(Kv kv){

		kv.set(selectPz());
		kv.set("cid",getCid());
		
		//获取商品图片地址
		kv.set("goodsimg", getGoodsimg());
				
		List<Record> records = Db.use(Const.SCMDB).template("scmJiandangJdfh.selectCzsp",kv).find();

		return records;
	}

	/**
	 * 获取某个商品的颜色尺码
	 */
	public List<Record> selectSpyscm(Kv kv){
		kv.set("cid",getCid());
		List<Record> records = Db.use(Const.SCMDB).template("scmJiandangJdfh.selectSpyscm", kv).find();

		return records;
	}
	/**
	 *新增或修改单店录入明细
	 */
	public RetKit insertDdlrmx(Kv kv){
		kv.set("cid",getCid());
		Record first = Db.use(Const.SCMDB).findFirst("select sku.id as skuid, sp.purprice as cgje, sp.dprice as lsj " +
						"from defsku sku " +
						"left join DEFSTYLE sp on sku.STYLEID=sp.ID " +
						"where sku.cid=? and sku.STYLEID=? and sku.clrid=? and sku.sizeid = ?"
				, kv.get("cid"), kv.get("spid"), kv.get("ysid"), kv.get("cmid"));
		Integer id = Db.use(Const.SCMDB).queryInt("select count(*) from scm_jiandang_ddlrmx where skuid = ? and userid=? ", first.get("skuid").toString(),kv.get("userid"));

		if (id <= 0){
			Db.use(Const.SCMDB).update("insert into scm_jiandang_ddlrmx(id, spid, skuid, ysid, cmid, sl, crje, lsj,userid) " +
					"values(?, ?, ?, ?, ?, ?, ?, ?,?)",YitIdHelper.nextId(), kv.get("spid")
					, first.get("skuid"), kv.get("ysid"), kv.get("cmid"), kv.get("sl"), first.get("cgje"), first.get("lsj"), kv.get("userid"));
			return RetKit.ok("新增成功");
		}else{
			Db.use(Const.SCMDB).update("update  scm_jiandang_ddlrmx set sl = ? " +
					"where skuid = ? ",kv.get("sl"), first.get("skuid"));
			return RetKit.ok("修改成功");

		}
	}

	/**
	 * 单店录入删除根据spid
	 */
	public RetKit deleteDdlrBySpid(Kv kv){
		int ddlr = Db.use(Const.SCMDB).update("delete from scm_jiandang_ddlr ddlr  where id = ? and userid=?", kv.get("id"),kv.get("userid"));
		Db.use(Const.SCMDB).update("delete from scm_jiandang_ddlrmx where spid = ? and userid=?", kv.get("spid"),kv.get("userid"));

		if (ddlr > 0){
			return RetKit.ok("删除成功");
		}
		return RetKit.fail("删除失败");
	}
	
	/**
	 * 单店录入全删除
	 */
	public RetKit deleteDdlrall(Kv kv){
		int ddlr = Db.use(Const.SCMDB).update("delete from scm_jiandang_ddlr ddlr  where  userid=?", kv.get("userid"));
		Db.use(Const.SCMDB).update("delete from scm_jiandang_ddlrmx where  userid=?", kv.get("userid"));

		if (ddlr > 0){
			return RetKit.ok("删除成功");
		}
		return RetKit.fail("删除失败");
	}

	/**
	 * 单点录入保存
	 */
	public RetKit baoCunDdlr(Kv kv){
		String userid=kv.getStr("userid"); //当前智能商品系统的登录用户id
		kv.set("cid", getCid());
		kv.set("userid",userid);
		Integer sfbl=kv.getInt("sfbl");
		Integer mdid = Db.use(Const.SCMDB).queryInt("select count(1) from SCM_JIANDANG_FHJG " +
				"where userid = ? and mdid = ? ", userid, kv.get("mdid"));
		if (mdid <= 0) {
			int update1 = Db.use(Const.SCMDB).update("insert into scm_jiandang_fhjg(id, cid, mdid, sgdh, zdbz, ml, userid, ywy)" +
							" values(?, ?, ?, ?, ?, ?, ?, ?)", YitIdHelper.nextId(), kv.get("cid"), kv.get("mdid")
					, kv.get("sgdh"), kv.get("bz"), kv.get("ml"), userid, kv.get("ywy"));

			int update = Db.use(Const.SCMDB).template("scmJiandangJdfh.ddlrBaocunmx", kv).update();
			if (update > 0 && update1 > 0 && sfbl==0){
				Db.use(Const.SCMDB).update("truncate table scm_jiandang_ddlr");
				Db.use(Const.SCMDB).update("truncate table scm_jiandang_ddlrmx");
				return RetKit.ok("保存成功");
			}else if(update > 0 && update1 > 0) {
				return RetKit.ok("保存成功");
			}
		}
		return RetKit.fail("保存的门店已有数据请先处理");
	}

	/**
	 * 单据编辑查询
	 */
	public List<Record> selectYinruDdlr(Kv kv){
		String userid=kv.getStr("userid"); //当前智能商品系统的登录用户id
		kv.set("cid", getCid());

		List<Record> records = Db.use(Const.SCMDB).find("select md.storename, fh.zdbz as zdbh, fhmx.mdid, fh.sgdh as bdh, fh.ml as ml, fh.ywy as ywy,sum(fhmx.bcfhsl) as sl,sum(fhmx.bcfhsl*fprice) as cgje  " +
				" from scm_jiandang_fhjgmx fhmx " +
				" left join scm_jiandang_fhjg fh on fh.cid=fhmx.cid and fh.mdid=fhmx.mdid and fh.userid=fhmx.userid " +
				" left join defstore md on fhmx.mdid = md.id " +
				" left join defemp ywy on fh.ywy = ywy.id" +
				" where fhmx.cid = ? and fhmx.userid = ?" +
				" group by md.storename, fh.zdbz,fhmx.mdid,fh.sgdh,fh.ml, fh.ywy", kv.get("cid"), userid
		);
		return records;
	}

	/**
	 * 确认引入
	 */
	public RetKit qrYinruBymdid(Kv kv){
		String userid=kv.getStr("userid"); //当前智能商品系统的登录用户id
		kv.set("cid", getCid());
		kv.set("userid",userid);
		
		deleteDdlrall(kv);//删除已经存在的单店录入
		Integer integer = Db.use(Const.SCMDB).queryInt("select count(1) from scm_jiandang_ddlr where userid=?",kv.get("userid"));
		if (integer <= 0){
			int update = Db.use(Const.SCMDB).template("scmJiandangJdfh.qrYinruBymdid", kv).update();
			int update1 = Db.use(Const.SCMDB).template("scmJiandangJdfh.qrYinruDdlrmx",kv).update();
			Db.use(Const.SCMDB).update("delete from scm_jiandang_fhjg " +
					"where mdid = ? and userid = ? and cid = ? ",kv.get("mdid"), kv.get("userid"), kv.get("cid"));
			Db.use(Const.SCMDB).update("delete from scm_jiandang_fhjgmx " +
					"where mdid = ? and userid = ? and cid = ? ",kv.get("mdid"), kv.get("userid"), kv.get("cid"));
			if (update > 0 && update1 > 0){
				return RetKit.ok("引入成功");
			}
		}

		return RetKit.fail("单店模式中已经存在数据请先处理");
	}
}
